import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import mutations from './mutations'
import actions from './actions'
import getters from './getters'

Vue.use(Vuex)
// 导出一个默认值，导入的时候用变量接收
export default new Vuex.Store({
  // state中保管着各个组件中共享的状态（数据），对状态统一管理
  state,
  /*  mutation中保管着修改状态的方法，组件通过访问mutation中的方法来修改数据
      每一个mutation中都有一个事件类型和一个回调函数（handler），handler接受
      两个参数
      第一个参数就是state,保存着store下的state中的状态
      第二个参数是payload（载荷）：传入的参数，可以是单个参数或者数组或者对象
      建议选择对象
      mutations中无法实现异步任务，这里面必须是同步代码
  */
  mutations,
  /* actions与mutations类似，里面可以实现异步任务 */
  actions,
  /* 如果需要对state中的一些状态进行不同的访问，这些访问在不同的组件中，访问的状态是
  用一个状态，我们可以通过getters对数据进行缓存，getter的返回值会根据的它的依赖被缓
  存起来，只有依赖被改变时才会触发 */
  getters,
  modules: {
  }
})
